package com.cgnpc.scp.sri.capacitybuilding.controller;

import cn.com.cgnpc.aep.bizcenter.appcenter.sdk.result.ApiResult;
import com.cgnpc.cud.annotation.OperatorType;
import com.cgnpc.cud.annotation.UBA;
import com.cgnpc.cud.core.domain.AjaxResult;
import com.cgnpc.scp.achievement.pojo.IdReq;
import com.cgnpc.scp.common.bean.CreateFileInfo;
import com.cgnpc.scp.common.utils.StringUtil;
import com.cgnpc.scp.sri.capacitybuilding.mybatis.entity.CapacityBuildingInfo;
import com.cgnpc.scp.sri.capacitybuilding.mybatis.entity.CapacityPlanPhase;
import com.cgnpc.scp.sri.capacitybuilding.pojo.CapacityBuildingInfoVo;
import com.cgnpc.scp.sri.capacitybuilding.pojo.CapacityBuildingPhaseVo;
import com.cgnpc.scp.sri.capacitybuilding.service.CapacityBuildingService;
import com.cgnpc.scp.common.bean.MyPageResult;
import com.cgnpc.scp.common.utils.AjaxResultUtil;
import io.swagger.annotations.ApiOperation;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.MessageSource;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletRequest;
import java.util.List;
import java.util.Map;

/**********************************
 * 用途说明: 能力建设计划管理
 * 作者姓名: zhangyibing
 * 创建时间: 2020年9月30日16:30:15
 ***********************************/
@RestController
@RequestMapping("/scp/sri/capacityBuilding/plan")
public class CapacityBuildingController {
    private static final Logger LOGGER = LoggerFactory.getLogger(CapacityBuildingController.class);

    @Autowired
    private MessageSource messageSource;

    @Autowired
    private CapacityBuildingService capacityBuildingService;

    /**********************************
     * 用途说明: 调试科研创新管理 - 能力建设计划管理 - 列表
     * 参数说明 params
     * 返回值说明: 能建列表
     ***********************************/
    @ApiOperation(value="调试科研创新管理 - 能力建设计划管理 - 列表")
    @UBA(module = "调试科研创新管理", action = "预算管理查询", channel = OperatorType.Page)
    @RequestMapping(value = "/listPage", method = {RequestMethod.POST})
    public AjaxResult listPage(HttpServletRequest request, @RequestBody Map<String, Object> params) {
        try {
            MyPageResult<CapacityBuildingInfo> result = capacityBuildingService.queryListPage(params);
            return AjaxResultUtil.createI18nDefaultSuccess(request,messageSource,result);
        } catch (Exception e) {
            LOGGER.error("CapacityBuildingController listPage error : {}",e.getMessage(),e);
            return AjaxResultUtil.createI18nDefaultError(request,messageSource,e.getMessage());
        }
    }

    /**********************************
     * 用途说明: 调试科研创新管理 - 能力建设计划管理 - 计划详情
     * 参数说明 params
     * 返回值说明: 能建列表
     ***********************************/
    @ApiOperation(value="调试科研创新管理 - 能力建设计划管理 - 列表")
    @UBA(module = "调试科研创新管理", action = "能力建设计划列表", channel = OperatorType.Page)
    @RequestMapping(value = "/planInfo", method = {RequestMethod.POST})
    public AjaxResult planInfo(HttpServletRequest request, @RequestBody IdReq idReq) {
        try {
            CapacityBuildingInfoVo result = capacityBuildingService.planInfo(idReq.getId());
            return AjaxResultUtil.createI18nDefaultSuccess(request,messageSource,result);
        } catch (Exception e) {
            LOGGER.error("CapacityBuildingController planInfo error : {}",e.getMessage(),e);
            return AjaxResultUtil.createI18nDefaultError(request,messageSource,e.getMessage());
        }
    }

    /**********************************
     * 用途说明: 调试科研创新管理 - 能力建设计划管理 - 计划新增（提交流程或提交变更流程）
     * 参数说明 params
     * 返回值说明: 能建列表
     ***********************************/
    @ApiOperation(value="调试科研创新管理 - 能力建设计划管理 - 计划新增")
    @RequestMapping(value = "/planSave", method = {RequestMethod.POST})
    public AjaxResult planSave(HttpServletRequest request, @RequestBody Map<String, Object> params) {
        try {
            //LOGGER.info("==CapacityBuildingController.java===planSave========89==============params===",params);
            AjaxResult result = capacityBuildingService.planSave(params);
            //LOGGER.info("==CapacityBuildingController.java===planSave========89==============result===",result);
            return AjaxResultUtil.createI18nDefaultSuccess(request,messageSource,result);
        } catch (Exception e) {
            LOGGER.error("CapacityBuildingController planSave error : {}",e.getMessage(),e);
            return AjaxResultUtil.createI18nDefaultError(request,messageSource,e.getMessage());
        }
    }

    /**********************************
     * 用途说明: 提交/回退流程
     * 参数说明 params
     * 返回值说明:
     ***********************************/
    @PostMapping("/submitProcess")
    @UBA(module = "能力建设计划管理", action = "能力建设计划管理审批流程提交/回退", channel = OperatorType.Button)
    @ApiOperation(value="提交/回退流程")
    public AjaxResult submitProcess(HttpServletRequest request,@RequestBody Map<String, Object> params) {
        try {
            ApiResult apiResult = capacityBuildingService.submitProcess(params);
            return AjaxResultUtil.createI18nDefaultSuccess(request,messageSource,apiResult);
        } catch (Exception e) {
            e.printStackTrace();
            LOGGER.error("CapacityBuildingController submitProcess error : {}",e.getMessage(),e);
            return AjaxResultUtil.createI18nDefaultError(request,messageSource,e.getMessage());
        }
    }

    /**********************************
     * 用途说明: 调试科研创新管理 - 能力建设计划管理 - 计划变更 -- 暂时屏蔽
     * 参数说明 params
     * 返回值说明: 能建列表
     ***********************************/
//    @ApiOperation(value="调试科研创新管理 - 能力建设计划管理 - 计划变更")
//    @RequestMapping(value = "/planUpdate", method = {RequestMethod.POST})
//    public AjaxResult planUpdate(HttpServletRequest request, @RequestBody CapacityBuildingInfoVo vo) {
//        try {
//            CapacityBuildingInfoVo result = capacityBuildingService.planUpdate(vo);
//            return AjaxResultUtil.createI18nDefaultSuccess(request,messageSource,result);
//        } catch (Exception e) {
//            LOGGER.error("CapacityBuildingController planUpdate error : {}",e.getMessage(),e);
//            return AjaxResultUtil.createI18nDefaultError(request,messageSource,e.getMessage());
//        }
//    }

    /**********************************
     * 用途说明: 调试科研创新管理 - 能力建设计划管理-导出Excel
     * 参数说明: HttpServletRequest request, @RequestBody T reqEntity
     * 返回值说明: Object
     ***********************************/
    @ApiOperation(value = "调试科研创新管理 - 能力建设计划管理-导出Excel")
    @UBA(module = "调试科研创新管理", action = "能力建设计划导出Excel", channel = OperatorType.Button)
    @RequestMapping(value = "/exportExcel", method = {RequestMethod.POST})
    @ResponseBody
    public AjaxResult exportExcel(HttpServletRequest request, @RequestBody Map<String, Object> params) {
        AjaxResult ajaxResult = null;
        try {
            CreateFileInfo createFileInfo = capacityBuildingService.exportExcel(params);
            return AjaxResultUtil.createSuccessMessage(createFileInfo);
        } catch (Exception e) {
            LOGGER.error("CapacityBuildingController exportExcel error : {}",e.getMessage(),e);
            return AjaxResultUtil.createI18nDefaultError(request,messageSource,e.getMessage());
        }
    }

    /**********************************
     * 用途说明: 调试科研创新管理 - 能力建设计划管理 - 获取所有年份
     * 参数说明 params
     * 返回值说明: 所有年份
     ***********************************/
    @ApiOperation(value="调试科研创新管理 - 能力建设计划管理 - 获取预算年度")
    @RequestMapping(value = "/getAllYear", method = {RequestMethod.POST})
    public AjaxResult getAllYear(HttpServletRequest request) {
        try {
        List<String> result = capacityBuildingService.getAllYear();
        return AjaxResult.success().put("years",result);
        } catch (Exception e) {
            LOGGER.error("CapacityBuildingController getAllYeas error : {}",e.getMessage(),e);
            return AjaxResultUtil.createI18nDefaultError(request,messageSource,e.getMessage());
        }
    }

    /**********************************
     * 用途说明: 调试科研创新管理 - 能力建设计划管理 - 获取所有年度计划名称及id
     * 参数说明 params
     * 返回值说明: 所有年度计划名称及id
     ***********************************/
    @ApiOperation(value="调试科研创新管理 - 能力建设计划管理 - 获取所有年度计划名称及id")
    @RequestMapping(value = "/getAllPlanInfo", method = {RequestMethod.POST})
    public AjaxResult getAllPlanInfo(HttpServletRequest request) {
        try {
            List<CapacityBuildingInfo> result = capacityBuildingService.getAllPlanInfo();
            return AjaxResult.success().put("data",result);
        } catch (Exception e) {
            LOGGER.error("CapacityBuildingController getAllPlanInfo error : {}",e.getMessage(),e);
            return AjaxResultUtil.createI18nDefaultError(request,messageSource,e.getMessage());
        }
    }

    /**********************************
     * 用途说明: 调试科研创新管理 - 能力建设计划管理 - 根据计划id获取所有项目阶段
     * 参数说明 params
     * 返回值说明: 项目阶段
     ***********************************/
    @ApiOperation(value="调试科研创新管理 - 能力建设计划管理 - 根据计划id获取所有项目阶段")
    @RequestMapping(value = "/getPhaseByPlanId", method = {RequestMethod.POST})
    public AjaxResult getPhaseByPlanId(HttpServletRequest request, @RequestBody Map<String, String> params) {
        try {
            String planId = params.get("planId");
            if(StringUtil.isNullOrSpace(planId)){
                return AjaxResult.error("planId can not be null");
            }
            List<CapacityPlanPhase> result = capacityBuildingService.getPhaseByPlanId(planId);
            return AjaxResult.success().put("data",result);
        } catch (Exception e) {
            LOGGER.error("CapacityBuildingController getPhaseByPlanId error : {}",e.getMessage(),e);
            return AjaxResultUtil.createI18nDefaultError(request,messageSource,e.getMessage());
        }
    }

    /**********************************
     * 用途说明: 调试科研创新管理 - 能力建设计划管理 - 进展提交（提交流程或存草稿）
     * 参数说明 params
     * 返回值说明: 能建列表
     ***********************************/
    @ApiOperation(value="调试科研创新管理 - 能力建设计划管理 - 进展提交")
    @RequestMapping(value = "/planStageSave", method = {RequestMethod.POST})
    public AjaxResult planStageSave(HttpServletRequest request, @RequestBody Map<String, Object> params) {
        try {
            AjaxResult result = capacityBuildingService.planStageSave(params);
            return AjaxResultUtil.createI18nDefaultSuccess(request,messageSource,result);
        } catch (Exception e) {
            LOGGER.error("CapacityBuildingController planStageSave error : {}",e.getMessage(),e);
            return AjaxResultUtil.createI18nDefaultError(request,messageSource,e.getMessage());
        }
    }

    /**********************************
     * 用途说明: 阶段进展 - 提交/回退流程
     * 参数说明 params
     * 返回值说明:
     ***********************************/
    @PostMapping("/stageSubmitProcess")
//    @UBA(module = "能力建设计划管理", action = "能力建设计划管理阶段进展审批流程提交/回退", channel = OperatorType.Button)
    @ApiOperation(value="阶段进展提交/回退流程")
    public AjaxResult stageSubmitProcess(HttpServletRequest request,@RequestBody Map<String, Object> params) {
        try {
            ApiResult apiResult = capacityBuildingService.stageSubmitProcess(params);
            return AjaxResultUtil.createI18nDefaultSuccess(request,messageSource,apiResult);
        } catch (Exception e) {
            e.printStackTrace();
            LOGGER.error("CapacityBuildingController stageSubmitProcess error : {}",e.getMessage(),e);
            return AjaxResultUtil.createI18nDefaultError(request,messageSource,e.getMessage());
        }
    }

    /**********************************
     * 用途说明: 阶段进展 - 阶段详情
     * 参数说明 params
     * 返回值说明:
     ***********************************/
    @PostMapping("/stageInfo")
    @ApiOperation(value="阶段进展-阶段详情")
    public AjaxResult stageInfo(HttpServletRequest request,@RequestBody IdReq idReq) {
        try {
            CapacityBuildingPhaseVo phaseVo = capacityBuildingService.stageInfo(idReq.getId());
            return AjaxResultUtil.createI18nDefaultSuccess(request,messageSource,phaseVo);
        } catch (Exception e) {
            e.printStackTrace();
            LOGGER.error("CapacityBuildingController stageSubmitProcess error : {}",e.getMessage(),e);
            return AjaxResultUtil.createI18nDefaultError(request,messageSource,e.getMessage());
        }
    }

    /**********************************
     * 用途说明: 阶段进展 - 阶段进展详情
     * 参数说明 params
     * 返回值说明:
     ***********************************/
    @PostMapping("/progressInfo")
    @ApiOperation(value="阶段进展-阶段进展详情")
    public AjaxResult progressInfo(HttpServletRequest request,@RequestBody IdReq idReq) {
        try {
            CapacityBuildingPhaseVo phaseVo = capacityBuildingService.progressInfo(idReq.getId());
            return AjaxResultUtil.createI18nDefaultSuccess(request,messageSource,phaseVo);
        } catch (Exception e) {
            e.printStackTrace();
            LOGGER.error("LaboratoryAnnualPlanController stageSubmitProcess error : {}",e.getMessage(),e);
            return AjaxResultUtil.createI18nDefaultError(request,messageSource,e.getMessage());
        }
    }

    /**********************************
     * 用途说明: 能建年度计划管理 - 能建计划删除草稿
     * 参数说明 params
     * 返回值说明:
     ***********************************/
    @ApiOperation(value="能建年度计划管理 - 能建计划删除草稿")
    @UBA(module = "能建年度计划管理", action = "能建计划删除草稿", channel = OperatorType.Page)
    @RequestMapping(value = "/deleteDraft", method = {RequestMethod.POST})
    public AjaxResult deleteDraft(HttpServletRequest request, @RequestBody Map<String, Object> params) throws Exception {
        ApiResult result = capacityBuildingService.deleteDraft(params);
        return AjaxResultUtil.createI18nDefaultSuccess(request,messageSource,result);
    }

    /**********************************
     * 用途说明: 能建年度计划管理 - 能建计划进展删除草稿
     * 参数说明 params
     * 返回值说明:
     ***********************************/
    @ApiOperation(value="能建年度计划管理 - 能建计划进展删除草稿")
    @UBA(module = "能建年度计划管理", action = "能建计划进展删除草稿", channel = OperatorType.Page)
    @RequestMapping(value = "/deleteProcessDraft", method = {RequestMethod.POST})
    public AjaxResult deleteProcessDraft(HttpServletRequest request, @RequestBody Map<String, Object> params) throws Exception {
        ApiResult result = capacityBuildingService.deleteProcessDraft(params);
        return AjaxResultUtil.createI18nDefaultSuccess(request,messageSource,result);
    }

}
